package 静态代码块;
/*
 * 类的成员之四：代码块(或初始化块)
 *  1.代码块的作用，用来初始化类，对象
 *  2.代码块如果有修饰的话，只能使用static
 *  3.分类、静态代码块VS非静态代码块
 * 4.静态代码块：
 *    》内部可以有输出语句
 *    》随着类的加载而执行,而且只执行一次
 *    》作用：初始化类的信息
 *    >静态代码块内只能调用静态的属性、静态的方法、不能调用非静态的结构
 * 5.非静态代码块：
 *    》内部可以有输出语句
 *    》随着对象的创建而执行
 *    》每创建一个对象就执行一次非静态代码块
 *    》作用 可以在创建对象时，对对象的属性等进行初始化
 *    》非静态代码块内可以调用静态的属性、静态的方法、或非静态的属性、非静态的方法
 *
 * 对属性可以赋值的位置
 *  ①默认初始化
 * ②显示初始化
 * ③构造器中初始化
 * ④有了对象以后，，可以通过"对象.属性"或"对象.方法"的方式，进行赋值
 * ⑤在代码块中赋值
 *
 * 执行的先后顺序①-②\⑤(这两看位置) -③-④
 *
 *
 *
 * */
public class BlockTest {
    public static void main(String[] args) {
        String desc=Person.desc;
        Person person = new Person();
        System.out.println(person.desc);
        Person person1 = new Person();
        System.out.println(desc);
    }
}
class Person{
    //属性
    String name;
    int age;
    static String desc="我是一个String类型静态属性";
    //构造器
    public Person(){

    }
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
    //static代码块
    static{
        System.out.println("我是Person下的静态代码块");
        desc="我是一个爱学习的人";
    }
    //非静态代码块
    {
        System.out.println("我是Person类的非静态代码块");
        desc="我不是一个不爱学习的人";
    }

}